#include <libgen.h>
#include <sys/mman.h>
#include <sys/ioctl.h>
+#ifdef MEMSHR
#include <memshr.h>
+#endif
#include "libvhd.h"
#include "tapdisk-image.h"
vbd->callback = tapdisk_vbd_callback;
vbd->argument = vbd;
- memshr_vbd_initialize();
+#ifdef MEMSHR
+ memshr_vbd_initialize();
+#endif
INIT_LIST_HEAD(&vbd->driver_stack);
INIT_LIST_HEAD(&vbd->images);
(treq.op == TD_OP_WRITE ? "write" : "read"),
treq.secs, treq.sec);
}
- } else
- if(treq.op == TD_OP_READ && td_flag_test(image->flags, TD_OPEN_RDONLY)) {
- uint64_t hnd = treq.memshr_hnd;
- uint16_t uid = image->memshr_id;
- blkif_request_t *breq = &vreq->req;
- uint64_t sec = tapdisk_vbd_breq_get_sector(breq, treq);
- int secs = breq->seg[treq.sidx].last_sect -
- breq->seg[treq.sidx].first_sect + 1;
-
- if(hnd != 0)
- memshr_vbd_complete_ro_request(hnd, uid, sec, secs);
- }
+ } else {
+#ifdef MEMSHR
+ if (treq.op == TD_OP_READ
+ && td_flag_test(image->flags, TD_OPEN_RDONLY)) {
+ uint64_t hnd = treq.memshr_hnd;
+ uint16_t uid = image->memshr_id;
+ blkif_request_t *breq = &vreq->req;
+ uint64_t sec = tapdisk_vbd_breq_get_sector(breq, treq);
+ int secs = breq->seg[treq.sidx].last_sect -
+ breq->seg[treq.sidx].first_sect + 1;
+
+ if (hnd != 0)
+ memshr_vbd_complete_ro_request(hnd, uid,
+ sec, secs);
+ }
+#endif
+ }
tapdisk_vbd_complete_vbd_request(vbd, vreq);
}
break;
case TD_OP_READ:
- if(td_flag_test(parent->flags, TD_OPEN_RDONLY))
- {
- int ret, seg = treq.sidx;
- blkif_request_t *breq = &vreq->req;
+#ifdef MEMSHR
+ if(td_flag_test(parent->flags, TD_OPEN_RDONLY)) {
+ int ret, seg = treq.sidx;
+ blkif_request_t *breq = &vreq->req;
- ret = memshr_vbd_issue_ro_request(treq.buf,
- breq->seg[seg].gref,
- parent->memshr_id,
- treq.sec,
- treq.secs,
- &treq.memshr_hnd);
- if(ret == 0)
- {
- /* Reset memshr handle. This'll prevent
- * memshr_vbd_complete_ro_request being called */
- treq.memshr_hnd = 0;
- td_complete_request(treq, 0);
- }
- else
- td_queue_read(parent, treq);
- }
- else
- td_queue_read(parent, treq);
+ ret = memshr_vbd_issue_ro_request(treq.buf,
+ breq->seg[seg].gref,
+ parent->memshr_id,
+ treq.sec,
+ treq.secs,
+ &treq.memshr_hnd);
+ if(ret == 0) {
+ /* Reset memshr handle. This'll prevent
+ * memshr_vbd_complete_ro_request being called
+ */
+ treq.memshr_hnd = 0;
+ td_complete_request(treq, 0);
+ } else
+ td_queue_read(parent, treq);
+ } else
+#endif
+ td_queue_read(parent, treq);
break;
}